#ifndef USERMANAGEMENTWIDGET_H
#define USERMANAGEMENTWIDGET_H

#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTableWidget>
#include <QLineEdit>
#include <QComboBox>
#include <QPushButton>
#include <QLabel>
#include <QGroupBox>
#include <QHeaderView>
#include <QMessageBox>
#include <QDialog>
#include <QDateTime>
#include <QTimer>
#include "../business/usermanager.h"
#include "../data/models.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 用户管理界面组件
 * 
 * 为管理员提供用户管理功能：
 * - 查看所有注册用户列表
 * - 搜索和过滤用户
 * - 查看用户基本信息
 * - 重置用户密码
 * - 用户状态管理
 */
class UserManagementWidget : public QWidget
{
    Q_OBJECT

public:
    explicit UserManagementWidget(QWidget *parent = nullptr);
    ~UserManagementWidget();
    
    /**
     * @brief 设置用户管理器
     * @param manager UserManager实例
     */
    void setUserManager(UserManager *manager);
    
    /**
     * @brief 刷新用户数据
     */
    void refreshData();

public slots:
    /**
     * @brief 处理用户数据变更信号
     */
    void onUserRegistered(const Customer &user);
    void onUserUpdated(const Customer &user);
    void onUserPasswordChanged(const QString &userId);
    
    // DataManager信号响应
    void onExternalFileChanged(DataType dataType, const QString& filePath);

private slots:
    /**
     * @brief 界面操作槽函数
     */
    void onSearchTextChanged();
    void onRefreshClicked();
    void onRefreshDataClicked();
    void onExportDataClicked();
    
    /**
     * @brief 表格操作槽函数
     */
    void onTableItemDoubleClicked(int row, int column);
    void onTableContextMenuRequested(const QPoint &pos);

signals:
    /**
     * @brief 状态消息信号
     */
    void statusMessageChanged(const QString &message, int timeout = 0);

private:
    /**
     * @brief 界面初始化
     */
    void setupUI();
    void setupUserTable();
    void setupConnections();
    void applyStyles();
    
    /**
     * @brief 数据操作
     */
    void loadUserData();
    void updateUserTable();
    void filterUserData();
    
    /**
     * @brief 用户操作
     */
    void showUserDetailDialog(const Customer &user);
    bool resetUserPassword(const QString &userId);
    void showStatusMessage(const QString &message, bool isError = false);
    
    /**
     * @brief 辅助方法
     */
    Customer getUserByRow(int row);
    QString getMessageBoxStyleSheet() const;

private:
    // 核心组件
    UserManager *m_userManager;
    
    // 主布局
    QVBoxLayout *m_mainLayout;
    
    // 搜索和过滤
    QLabel *m_searchLabel;
    QLineEdit *m_searchEdit;
    QPushButton *m_refreshButton;
    
    // 用户表格
    QTableWidget *m_userTable;
    
    // 操作按钮
    QHBoxLayout *m_buttonLayout;
    QWidget *m_buttonWidget;
    QPushButton *m_refreshDataButton;
    QPushButton *m_exportDataButton;
    
    // 状态显示
    QPushButton *m_statusLabel;
    
    // 数据和状态
    QList<Customer> m_allUsers;
    QList<Customer> m_filteredUsers;
    QString m_selectedUserId;
    
    // 定时器
    QTimer *m_searchTimer;
    
    // 表格列索引
    enum TableColumn {
        COL_ID = 0,
        COL_USERNAME = 1,
        COL_REG_DATE = 2,
        COL_LAST_LOGIN = 3,
        COL_STATUS = 4,
        COL_COUNT = 5
    };
};

#endif // USERMANAGEMENTWIDGET_H
